home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / compuserve-file-archive / 03 Demos and Info / ASMTXT.SDA / ASM3 < prev    next >
Encoding:
Text File  |  2019-04-13  |  5.5 KB  |  213 lines

  1.  
  2.  
  3.  
  4.        ┴TARI ┴SSEMBLER ├OURSE
  5.        (EDITED FOR ├OMMODORE)
  6.  
  7.  -----------------------------------
  8.  
  9.    3.1   ├OMPARING AND ╘ESTING
  10.  
  11.    ╨ROGRAMMING INVOLVES MANY DECISIONS AND BRANCHES BASED ON THE OUTCOME OF
  12.  TESTS. ╔N ┴SSEMBLY ╠ANGUAGE, DECISIONS ARE BASED ON THE CONDITION OF THE
  13.  PROCESSOR STATUS FLAGS AFTER AN OPERATION. ╔N ADDITION TO THE LOGICAL
  14.  FUNCTIONS, THE ├OMPARE AND ┬IT-TEST INSTRUCTIONS ARE USEFUL MEANS FOR
  15.  TESTING DATA.
  16.  
  17.  
  18.    3.1.1 ╥EVIEW OF ╠OGICAL ╞UNCTIONS
  19.  
  20.     ┴S DISCUSSED IN ╙ECTION 2.1.5, THE ┴╬─, ╧╥, AND ┼╧╥ FUNCTIONS ARE VERY
  21.  USEFUL TOOLS FOR MANIPULATING DATA BIT-BY-BIT. ┬UT, THESE FUNCTIONS, AND
  22.  THE ┴─├ AND ╙┬├ INSTRUCTIONS, ALWAYS EFFECT THE CONTENTS OF THE
  23.  ACCUMULATOR. ╓ERY OFTEN, A COMPARE OR TEST OPERATION MAY NEED TO BE DONE
  24.  SEVERAL TIMES USING THE SAME CONSTANT. ╔N THIS CASE, THE CONSTANT WOULD
  25.  NEED TO BE LOADED FOR EACH TEST. ╞OR THIS REASON, TWO COMMANDS WERE ADDED
  26.  THAT DO THESE OPERATIONS WITHOUT SAVING THE RESULTS IN THE ACCUMULATOR -
  27.  THE ├═╨ AND ┬╔╘ INSTRUCTIONS.
  28.  
  29.  
  30.    3.1.2   ├OMPARING
  31.  
  32.   ,-----.
  33.   ▄ ├═╨ ▄ - ├OMPARE ═EMORY WITH ┴CC.
  34.   '-----'
  35.    ┴ - ═
  36.  
  37.    ╘HIS INSTRUCTION SUBTRACTS THE CONTENTS OF MEMORY FROM THE ACCUMULATOR.
  38.  ╒SING THE ├═╨ EFFECTS THE ZERO, NEGATIVE AND CARRY FLAGS; THE ACCUMULATOR
  39.  IS NOT EFFECTED. ╘HE FOLLOWING EXAMPLE COMPARES A VALUE IN MEMORY TO THREE
  40.  CONSTANTS AND BRANCHES TO A DIFFERENT LOCATION FOR EACH:
  41.  
  42.    ╠─┴ $2┴0   ; VARIABLE TO TEST.
  43.    ├═╨ #12    ;╔S IT TWELVE?...
  44.    ┬┼╤ ─╧╔╘12 ;┘ES...╟O TO ─╧╔╘12.
  45.    ├═╨ #66    ;╬O...THEN IS IT 66?
  46.    ┬┼╤ ─╧╔╘66 ;┘ES...╟O TO ─╧╔╘66.
  47.    ├═╨ #100   ;╬O...THEN IS IT 100?
  48.    ┬┼╤ ─╧╔╘100 ;┘ES...╟O TO ─╧╔╘100.
  49.    ; ╬O...(CONTINUE WITH PROGRAM.)
  50.  
  51.  
  52.    3.1.3   ╘ESTING ┬ITS...
  53.  
  54.   ,-----.
  55.   ▄ ┬╔╘ ▄ -- ╘EST ┬ITS IN ═EMORY
  56.   '-----'     WITH ┴CCUMULATOR
  57.   ═ ┴╬─ ┴
  58.  
  59.    ╘HE ┬╔╘ INSTRUCTION PERFORMS A LOGICAL ┴╬─ BETWEEN A MEMORY LOCATION AND
  60.  THE ACCUMULATOR BUT DOES NOT STORE THE RESULT INTO THE ACCUMULATOR. ╔T DOES
  61.  EFFECT THE ZERO, NEGATIVE AND OVERFLOW FLAGS. ╧NE USE OF THIS OPERATION IS
  62.  ILLUSTRATED BELOW:
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  ═┴╙╦=1 ;╠ET'S CHECK FIRST BIT...
  71.    ╠─┴ #═┴╙╦ ;╠OAD ═┴╙╦ INTO ┴CC.
  72.    ┬╔╘ $6╞0 ;├HECK 1ST LOCATION
  73.    ┬╬┼ ┘┼╙1 ;╟O TO ┘┼╙1 IF BIT1 IS "1".
  74.    ┬╔╘ $6╞1 ;╘EST SECOND LOCATION.
  75.    ┬┼╤ ┘┼╙2 ;╟O TO ┘┼╙2 IF THE BIT IS "0".
  76.   ;ETC...
  77.  
  78.  
  79.    3.1.4  ╘ESTING ╔NDEX ╥EGISTERS
  80.  
  81.    ╘HERE ARE ├OMPARE COMMANDS THAT TEST THE ╪ AND ┘ REGISTERS JUST AS THE
  82.  ├═╨ LOOKS AT THE ACCUMULATOR. ╘HEY ARE ├╨╪ AND ├╨┘.
  83.  
  84.  
  85.    ╚ERE IS A SIMPLE LOOP WITH A COMPARISON TO ┬┴╙╔├...
  86.  
  87.  ╔N ┬┴╙╔├:
  88.  
  89.  100 ╞╧╥ ╔=1 ╘╧ 10
  90.  110 ...DO SOMETHING...
  91.  120 ╬┼╪╘ ╔
  92.  
  93.  ╔N ┴SSEMBLY:
  94.  
  95.  100       ╠─╪ #1   ;START AT ONE.
  96.  110 ╠╧╧╨  ...DO SOMETHING...
  97.  120       ╔╬╪      ;ADD 1 TO ╪-REG.
  98.  130       ├╨╪ #11  ;IS IT ABOVE 10?
  99.  140       ┬╬┼ ╠╧╧╨ ;LOOP IF NO.
  100.  
  101.  
  102.  
  103.    3.2   ┬RANCHING ╔NSTRUCTIONS
  104.  
  105.    ╘HE FOLLOWING INSTRUCTIONS ALLOW BRANCHING TO A NEW PROGRAM LOCATION
  106.  DEPENDING ON THE CONDITION OF A STATUS FLAG. ╔F THE CONDITION IS NOT MET,
  107.  THE PROGRAM CONTINUES WITH THE NEXT INSTRUCTION. ╘HE BRANCH INSTRUCTIONS
  108.  ARE ESSENTIALLY THE ╔╞-╘╚┼╬-╟╧╘╧'S OF ┴SSEMBLY PROGRAMMING.
  109.     ╘HEY ALL USE "╥ELATIVE ADDRESSING" WHICH REQUIRES A ONE BYTE OPERAND.
  110.  ╘HIS SPECIFIES THE NUMBER OF BYTES AND THE DIRECTION TO JUMP IN THE
  111.  PROGRAM. ┬ECAUSE OF THIS ONE-BYTE AMMOUNT, THE BRANCH CAN ONLY BE +127
  112.  THROUGH -128. ╞ORTUNATELY, THE ┴SSEMBLER DOES THIS CALCULATION FOR US WHEN
  113.  WE SPECIFY A LABEL AS THE OPERAND.
  114.  
  115.    3.2.1  ┬┼╤/┬╬┼ - ┬RANCH IF ┼QUAL OR ╬OT-┼QUAL
  116.  
  117.   ,-----.
  118.   ▄ ┬┼╤ ▄ - ┬RANCH ON ╥ESULT = ┌ERO
  119.   '-----'
  120.   ? ┌ = 1
  121.  
  122.   ,-----.
  123.   ▄ ┬╬┼ ▄ - ┬RANCH ON ╥ESULT <> ┌ERO
  124.   '-----'
  125.   ? ┌ = 0
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.    3.2.2  ┬├├/┬├╙ - ┬RANCH IF
  137.              ╟REATER OR ╠ESS-╘HAN
  138.  
  139.   ,-----.
  140.   ▄ ┬├├ ▄ -- ┬RANCH ON ├ARRY ├LEAR 
  141.   '-----'
  142.   ? ├ = 0
  143.  
  144.   ,-----.
  145.   ▄ ┬├╙ ▄ -- ┬RANCH ON ├ARRY ╙ET
  146.   '-----'
  147.   ? ├ = 1
  148.  
  149.  
  150.    3.2.3   ┬RANCH IF ╨OSITIVE
  151.               OR ╬EGATIVE
  152.  
  153.   ,-----.
  154.   ▄ ┬╨╠ ▄ -- ┬RANCH ON ╥ESULT ╨LUS
  155.   '-----'
  156.   ? ╬ = 0
  157.  
  158.   ,-----.
  159.   ▄ ┬═╔ ▄ -- ┬RANCH ON ╥ESULT ═INUS
  160.   '-----'
  161.   ? ╬ = 1
  162.  
  163.  
  164.    ╚ERE'S AN EXAMPLE THAT LOOKS AT THE
  165. FRONT JOYSTICK ON THE '64 SO THAT SOME
  166. PARTICULAR ACTION MAY TAKE PLACE:
  167.    ╬OTICE THAT THE SWITCHES OF THE
  168. JOYSTICK MAY A PARTICULAR BIT 0,
  169. SO "BRANCH IF NOT TRUE" IS "BNE".
  170.  
  171.  ╩╧┘╞=$─├01
  172.  ╞╔╥┼=$10     ;╞IRE BUTTON IS 4TH BIT.
  173.  ─╧╫╬=2       ;─OWN IS FIRST BIT.
  174.  ╒╨=1         ;╒P IS ZEROTH BIT.
  175.             ;THE BIT=0 WHEN PRESSED.
  176.  ╞╬╘┼╙╘  ╠─┴ #╞╔╥┼   ;╠OAD BIT4 MASK
  177.          ┬╔╘ ╩╧┘╞    ;<╞╔╥┼> HIT?
  178.          ┬╬┼ ╞╬╘┼╙╘1 ;NOPE.
  179.        ...CODE...    ;YES, DO STUFF
  180.        ...CODE...    ;FOR FIRE.
  181.  ╞╬╘┼╙╘1 ╠─┴ ╙┼╠╦┼┘  ;╠OAD BIT2 MASK
  182.          ┬╔╘ ╩╧┘╞    ;<─╧╫╬> HIT?
  183.          ┬╬┼ ╞╬╘┼╙╘2 ;NOT YET.
  184.        ...CODE...    ;YES, DO STUFF
  185.        ...CODE...    ;FOR DOWN.
  186.  ╞╬╘┼╙╘2 ╠─┴ ╙╘╥╦┼┘  ;╠OAD BIT1 MASK
  187.          ┬╔╘ ╩╧┘╞    ;<╒╨> HIT?
  188.          ┬╬┼ ╞╬╘┼╙╘3 ;NONE OF 'EM.
  189.        ...CODE...    ;YES, DO STUFF
  190.        ...CODE...    ;FOR UP.
  191.  ╞╬╘┼╙╘3 ;CONTINUE OR TEST AGAIN.
  192.  
  193.  
  194.  ╬OTE THAT ╔ CHOSE TO BRANCH AROUND THE CODE WHEN THE TEST WAS FALSE INSTEAD
  195.  OF BRANCHING TO THE CODE WHEN TRUE.
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.    3.3  ├ONTROL AND ╙TRUCTURE OF PROGRAMMING IN ┴SSEMBLER
  203.  
  204.    ┴S IN ANY PROGRAMMING LANGUAGE, IT IS IMPORTANT TO ORGANIZE YOUR CODE IN
  205.  A LOGICAL AND STRUCTURED MANNER. ╔N ┴SSEMBLY ╠ANGUAGE, THIS REQUIRES MUCH
  206.  MORE DETAIL AND, THEREFORE, LEAVES MORE ROOM FOR ERROR. ╘HE BEST WAY TO
  207.  MINIMIZE THIS ERROR IS TO DEFINE THE FUNCTIONS OF YOUR PROGRAM IN GENERAL
  208.  TERMS THEN BEGIN TO BUILD UP MORE DETAIL. ╧RGANIZE THE FLOW OF THE
  209.  APPLICATION BEFORE HITTING THE KEYBOARD!
  210.    ╘HE USE OF MEANINGFUL SUBROUTINES HELPS OUT IN ANY LANGUAGE. ╔N THE NEXT
  211.  SESSION, WE'LL DISCUSS THE USE OF SUBROUTINES AND THE "STACK".
  212.  
  213.